package com.ruoyi.oss.service;

import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.IdUtil;
import com.ruoyi.common.utils.StringPool;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.oss.domain.SysOss;
import com.ruoyi.oss.domain.bo.UploadResult;
import org.springframework.http.ResponseEntity;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Date;

public interface CloudOssService {

    /**
     * 构建文件的路径和名称
     *
     * @param prefix 前缀地址
     * @param suffix 文件后缀类型
     * @return 路径地址
     */
    default String getPath(String prefix, String suffix) {
        // 生成uuid
        String uuid = IdUtil.fastSimpleUUID();
        // 文件路径
        String path = DateUtil.format(new Date(), "yyyyMMdd") + StringPool.SLASH + uuid;
        if (StringUtils.isNotBlank(prefix)) {
            path = prefix + StringPool.SLASH + path;
        }
        if (StringUtils.isNotBlank(suffix)) {
            return path + StringPool.DOT + suffix;
        } else {
            return path;
        }
    }

    /**
     * 上传文件至OSS
     *
     * @param multipartFile 多部份文件
     * @param fileSuffix    文件后缀
     * @return 上传文件的结果
     */
    UploadResult upload(MultipartFile multipartFile, String fileSuffix) throws IOException;

    /**
     * 下载文件
     *
     * @param sysOss              文件上传记录
     * @param httpServletRequest  请求
     * @param httpServletResponse 响应
     * @return 响应体
     */
    ResponseEntity<StreamingResponseBody> download(SysOss sysOss, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse);
}
